#ifndef DATE_H
#define DATE_H
// date.h
// class Date declaration

#include <cassert>
#include <iostream>
using namespace std;

//defferent classed to represent the different exceptions
class wordNegOrZero {};
class wordTooLarge {};


enum Month
{
	January = 1,
	February,
	March,
	April,
	May,
	June,
	July,
	August,
	September,
	October,
	November,
	December
};

class Date
{
public:
    //Date's constructor
    Date(int day, Month month, int year);
    //Default Constructor
    Date();
	// return the day of the month
	int	day () const;
	// return the month of the year
	Month month () const;
	// return the year
	int year () const;
	// return true if it's a leap-year, false if not
	bool isLeapYear () const;
	//overloaded equality operator
	bool operator==( const Date& rhs) const;
	//increase the date by one
	void increaseDateByOne();
	//change default date
	static void setDefaultDate( int day, Month month, int year );

private:
	// return the number of days in _month
	int	daysInMonth () const;

	int	_day;
	// internally month is stored as an integer
	// to allow for operations such as addition, subtraction etc.
	int _month;
	int	_year;
	//default date as a static data member
	static Date _default;
};

// standalone function for printing date
void printDate(const Date& date);

#endif
